

Page({

  /**
   * 页面的初始数据
   */
  data: {
    address:{},
    cart:[],
    allChecked: false,
    totalPrice:0,
    totalNum:0
  },


  //点击 收货地址
  handleChooseAddress(){
    wx.chooseAddress({
      success: (result) => {
        console.log(result);
        wx.setStorageSync("address",result);
      }
    })
  },

  //商品的选中
  handleItemChange(e){
    //获取被修改的商品的id
    const goods_id=e.currentTarget.dataset.id;
    //获取购物车数组
    let {cart}=this.data;
    //找到被修改的商品对象
    let index=cart.findIndex(v=>v.goods_id===goods_id);
    //选中状态取反
    cart[index].checked=!cart[index].checked;
    //把购物车数据重新设置回data中以及缓存中
    this.setCart(cart);
  },

  // 设置购物车状态的同时 同时计算 底部工具栏的数据 全选 总价格 购买的数量
  setCart(cart){

    //更新总金额计算
    let totalPrice=0;
    let totalNum=0;
    let allChecked=true;
    cart.forEach(v=>{
      if(v.checked){
        totalPrice+=v.num*v.goods_price;
        totalNum+=v.num;
      }else{
        allChecked=false;
      }
    });
    //判断数组是否为空
    allChecked=cart.length!=0?allChecked:false;
    this.setData({
      cart,
      totalPrice,
      totalNum,
      allChecked
    });
    wx.setStorageSync("cart", cart);
  },

  // 商品的全选功能
  handleItemAllCheck(){
    //获取data中的数据
    let {cart, allChecked}=this.data;
    //修改值
    allChecked=!allChecked;
    //循环修改cart数组中的商品选中状态
    cart.forEach(v=>v.checked=allChecked);
    //把修改后的值填充回data 或者缓存中
    this.setCart(cart);
  },

  //商品数量的编辑功能
  handleItemNumEdit(e){
    //获取传递过来的参数
    const {operation,id}=e.currentTarget.dataset;
    //获取购物车数组
    let {cart}=this.data;
    //找到需要修改的商品的索引
    const index=cart.findIndex(v=>v.goods_id===id);

    //判断是否要执行删除
    if(cart[index].num===1&&operation===-1){
      wx.showModal({
        title: '提示',
        content: '您是否要删除？',
        success: (res) => {
          if(res.confirm){
            cart.splice(index,1);
            this.setCart(cart);
          }else if(res.cancel){
            console.log("用户点击取消");
          }
        }
      });
    }else{
    //进行修改数量
    cart[index].num+=operation;
    //设置回缓存和data中
    this.setCart(cart);
    }

  },

  //点击结算
  handlePay(){
    // 判断收货地址
    const {address,totalNum}=this.data;
    if(!address.userName){
      wx.showToast({
        title: '您还没有选择收货地址',
        icon: 'none',
        duration: 1500,
      });
      return;
    }
    //判断用户没有选购商品
    if(totalNum===0){
      wx.showToast({
        title: '您还没有选中商品',
        icon: 'none',
        duration: 1500,
      });
      return;
    }
    //跳转到支付页面
    wx.navigateTo({
      url: '/pages/pay/index'
    });
  },

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad: function (options) {

  },

  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady: function () {

  },

  /**
   * 生命周期函数--监听页面显示
   * 1
   *    1 获取缓存中的购物车数组
   *    2 把购物车数据填充到data中
   * 
   * 2 全选
   */
  onShow: function () {
    //获取缓存中的收货地址信息
    const address=wx.getStorageSync("address");
    //获取缓存中的购物车数据
    const cart=wx.getStorageSync("cart")||[];
    //计算全选
    // const allChecked=cart.length?cart.every(v=>v.checked):false; //为了提升性能
    let allChecked=true;

    this.setData({address});
    //算总金额
    this.setCart(cart);
  },

  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide: function () {

  },

  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload: function () {

  },

  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh: function () {

  },

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom: function () {

  },

  /**
   * 用户点击右上角分享
   */
  onShareAppMessage: function () {

  }
})